<?php
/**
 * Created by PhpStorm
 * User: ZhouFurong
 * Date: 2020/12/8
 * Time: 17:33
 */


/*********** new self() 和 new static() 的区别  ************
 *
 * 有在继承中体现，如果没有任何继承，这两者是没有区别的
 * new self() 返回的实例是 万年不变的，无论谁去调用，都返回同一个类的实例
 * new static() 则由调用者决定的，不同的调用者返回不同的实例
 *
 */
class Father
{
    public function getNewFather()
    {
        return new self();
    }

    public function getNewCaller()
    {
        return new static();
    }
}

$f = new Father();

//var_dump(get_class($f->getNewFather()));
//var_dump(get_class($f->getNewCaller()));


class SunOne extends Father
{

}

class SunTwo extends Father
{

}


$sO = new SunOne();
$sT = new SunTwo();

var_dump(get_class($sO));// $sO 是 sunOne 的实例
var_dump(get_class($sT));// $sT 是 sunTwo 的实例

print (get_class($sO->getNewFather())).PHP_EOL;// father
print (get_class($sT->getNewFather())).PHP_EOL;// father
print (get_class($sO->getNewCaller())).PHP_EOL;// sunOne
print (get_class($sT->getNewCaller())).PHP_EOL;// sunTwo
